Amazon QuickSightでデータセットへのアクセスを制限する
Amazon QuickSight の Enterprise Edition では、行レベルのセキュリティ(row-level security/RLS)を設定することで、データセットへのアクセスを制限できます。
GRANT または DENY のルール指定が可能で、SPICE・非SPICEのどちらのデータセットにも適用できます。
さっそく触ってみました。
前提
本機能はエンタープライズエディションでのみ利用可能です。
作業の流れ
以下の流れで作業します。
- データセットの定義
- データセットルールの定義
- データセットルールをデータセットに適用
- ダッシュボードへのアクセスコントロールを確認
- データセットルールを解除
1. データセットの定義
アクセスコントロールをかけるデータセットを用意します。 今回は、デフォルトでサンプルとして用意されている、"Sales-Pipeline" データセットを利用します。
このデータセットは
- リージョン(US, EMEA, APAC)
- セグメント(Enterprise, SMB, Startup)
- Opportunity Stage(Lead, Prospect, etc)
といった売上データを管理しています。
今回は、フィールド
- リージョン
- セグメント
をアクセス制限に利用します。
このデータセットは SPICE で管理されていますが、行レベルのセキュリティは 非 SPICE のデータセットに対しても利用できます。
2. データセットルールの定義
次にアクセスコントロールするデータセットルールを作成します。
このデータセットも SPICE・非SPICE の両方を利用できます。
実運用では、データソースには
- SPICE にファイルアップロード
- S3
- RDS
あたりを利用することになるかと思います。
ルールのデータスキーマ
データセットとデータセットルールに対して SQL JOIN 相当の操作ができるように、データセットルールのデータスキーマを定義します。
以下のカラムを用意します
- UserName
- アクセスをかけるフィールド一覧
CSV ファイルの例
UserName,Region,Segment AlejandroRosalez,EMEA,"Enterprise,SMB,Startup" MarthaRivera,US,Enterprise NikhilJayashankars,US,SMB PauloSantos,US,Startup SaanviSarkar,APAC,"SMB,Startup" sales-tps@example.com,"","" ZhangWei,APAC,"Enterprise,Startup"
RDS に対する SQL の例
select User as UserName, Region, Segment from tps-permissions
RDS のカラム名とデータセットのカラム名が異なる場合、SQL 時にエイリアスを使ってデータセットのフィールド名に合わせます。
3. データセットルールをデータセットに適用
ルールを適用したいデータセットを選択し、Permissions を選択します。
ポップアップダイアログで「Selected data set rules」にデータセットの一覧が表示されるため、ルールを定義したデータセットを指定し、「Permissions Policy」に GRANT または DENY を指定します。
確認画面が表示され、Apply すればルールが適用されます。
適用後、データセット一覧画面で アクセス制限のあるデータセットには"RESTRICTED" のアイコンがつけられています。
Analysis 一覧でも同じく専用アイコンがつけられています。
4. ダッシュボードへのアクセスコントロールを確認
アクセスコントロールの様子を Grant/Deny のそれぞれで確認します。
Grant
- 指定された各ユーザーには、データセットルールのフィールド値に一致する行のみが表示されます。
- フィールド値がブランクの場合、任意の値にアクセスできます。
- ルールに記載のないユーザーはデータセットにアクセスできなくなります。
例
UserName,Region,Segment SaanviSarkar,APAC,"SMB,Startup" sales-tps@example.com,"",""
SaanviSarkar は「Region が APAC」かつ「Segment が SMB または Startup」のデータのみアクセスできます。
sales-tps@example.com は「Region が 任意の値」かつ「Segment が 任意の値」のデータのみアクセスできます。つまり、何も制限がかかっていません。
Deny
- 指定された各ユーザーには、データセットルールのフィールド値に一致しない行のみが表示されます。
- フィールド値がブランクの場合、任意の値にアクセスできなくなります。
- ルールに記載のないユーザーはデータセットへのアクセスを受けません。
例
UserName,Region,Segment SaanviSarkar,APAC,"SMB,Startup" sales-tps@example.com,"",""
SaanviSarkar は「Region が APAC」かつ「Segment が SMB または Startup」を覗いたデータのみにアクセスできます。
sales-tps@example.com はデータセットにアクセスできなくなります。
ダッシュボードへの影響
UserName,Region,Segment SaanviSarkar,APAC,"SMB,Startup"
を Grant で適用する前後でダッシュボードにどのような違いがあるのか確認します。
ルール適用前
全データが表示されています。
ルール適用後
「Region が APAC」かつ「Segment が SMB または Startup」のデータのみ表示されています。
5. データセットルールを解除
ルールを適用しているデータセットを選択し、Permissions をクリックします。
Selected data set rules に現在適用済みのルールを確認できます。
ルールを解除するには "Remove data set" ボタンをクリックします。
確認画面が表示され、"Remove data set" リンクで解除完了です。
データセットルールが不要な場合は、合わせてこのデータセットを削除してください。
注意
データセットに対して、ルールは一つだけ適用できます。 たとえば、同じデータセットに対して GRANT と DENY の2種類のルールを適用することはできません。
Deny 形式でルールを適用すると、データセットに新しい種類のデータが紛れこんできた時に、全ユーザーに丸見えになります。 データとルールで同期遅延が発生しないように気をつけましょう。